<!DOCTYPE html>
            
<HTML>
<HEAD>
<meta name="booktitle" content="Developing Applications With Objective Caml" >
 <meta charset="ISO-8859-1"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<META name="GENERATOR" content="hevea 1.05-7 of 2000-02-24">
<META NAME="Author" CONTENT="Christian.Queinnec@lip6.fr">
<LINK rel=stylesheet type="text/css" href="videoc-ocda.css">
<script language="JavaScript" src="videoc.js"><!--
//--></script>
<TITLE>
 Exercises
</TITLE>
</HEAD>
<BODY class="regularBody">
<A HREF="book-ora068.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
<A HREF="index.html"><IMG SRC ="contents_motif.gif" ALT="Contents"></A>
<A HREF="book-ora070.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
<HR>

<H2> Exercises</H2>
<A NAME="toc101"></A>
<H3> Creation of a Toplevel and Standalone Executable</H3>
Consider again the Basic interpreter. Modify it to make a new toplevel.
<OL type=1>
<LI>
 Split the Basic application into 4 files, each with the extension
<CODE>.ml</CODE>. The files will be organized like this: abstract syntax (<TT><A id="a175__1_APPEND/Compilationcor.ml.tex" href="javascript: void showMessage('1_APPEND/Compilationcor.ml.tex')" class="mousable"><SPAN style=""><!-- 1,APPEND/Compilationcor.ml.tex,basic-decoup-syntax -->syntax.ml</SPAN></A></TT>), printing (<TT><A id="a176__2_APPEND/Compilationcor.ml.tex" href="javascript: void showMessage('2_APPEND/Compilationcor.ml.tex')" class="mousable"><SPAN style=""><!-- 2,APPEND/Compilationcor.ml.tex,basic-decoup-pprint -->pprint.ml</SPAN></A></TT>), parsing (<TT><A id="a177__3_APPEND/Compilationcor.ml.tex" href="javascript: void showMessage('3_APPEND/Compilationcor.ml.tex')" class="mousable"><SPAN style=""><!-- 3,APPEND/Compilationcor.ml.tex,basic-decoup-alexsynt -->alexsynt.ml</SPAN></A></TT>) and evaluation of instructions (<TT><A id="a178__4_APPEND/Compilationcor.ml.tex" href="javascript: void showMessage('4_APPEND/Compilationcor.ml.tex')" class="mousable"><SPAN style=""><!-- 4,APPEND/Compilationcor.ml.tex,basic-decoup-eval -->eval.ml</SPAN></A></TT>). The head of each file should contain the open statements to load the modules required for compilation.    
<!-- POPUP DEFINITION -->
<layer id="l__1_APPEND/Compilationcor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","1_APPEND/Compilationcor.ml.tex","");
// --></script><span style="">
 <TT>syntax.ml</TT> : 


<PRE><BR><B>type</B><CODE> </CODE>op_unr<CODE> </CODE><CODE>=</CODE><CODE> </CODE>OPPOSE<CODE> </CODE><CODE>|</CODE><CODE> </CODE>NON<CODE> </CODE><CODE> </CODE>;;<BR><BR><B>type</B><CODE> </CODE>op_bin<CODE> </CODE><CODE>=</CODE><CODE> </CODE>PLUS<CODE> </CODE><CODE>|</CODE><CODE> </CODE>MINUS<CODE> </CODE><CODE>|</CODE><CODE> </CODE>MULT<CODE> </CODE><CODE>|</CODE><CODE> </CODE>DIV<CODE> </CODE><CODE>|</CODE><CODE> </CODE>MOD<CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>EQUAL<CODE> </CODE><CODE>|</CODE><CODE> </CODE>INF<CODE> </CODE><CODE>|</CODE><CODE> </CODE>INFEQ<CODE> </CODE><CODE>|</CODE><CODE> </CODE>SUP<CODE> </CODE><CODE>|</CODE><CODE> </CODE>SUPEQ<CODE> </CODE><CODE>|</CODE><CODE> </CODE>DIFF<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>AND<CODE> </CODE><CODE>|</CODE><CODE> </CODE>OR<CODE> </CODE><CODE> </CODE>;;<BR><BR><B>type</B><CODE> </CODE>expression<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>ExpInt<CODE> </CODE><B>of</B><CODE> </CODE>int<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ExpVar<CODE> </CODE><B>of</B><CODE> </CODE>string<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ExpStr<CODE> </CODE><B>of</B><CODE> </CODE>string<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ExpUnr<CODE> </CODE><B>of</B><CODE> </CODE>op_unr<CODE> </CODE><CODE>*</CODE><CODE> </CODE>expression<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ExpBin<CODE> </CODE><B>of</B><CODE> </CODE>expression<CODE> </CODE><CODE>*</CODE><CODE> </CODE>op_bin<CODE> </CODE><CODE>*</CODE><CODE> </CODE>expression<CODE> </CODE><CODE> </CODE>;;<BR><BR><B>type</B><CODE> </CODE>instruction<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Rem<CODE> </CODE><B>of</B><CODE> </CODE>string<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Goto<CODE> </CODE><B>of</B><CODE> </CODE>int<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Print<CODE> </CODE><B>of</B><CODE> </CODE>expression<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Input<CODE> </CODE><B>of</B><CODE> </CODE>string<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>If<CODE> </CODE><B>of</B><CODE> </CODE>expression<CODE> </CODE><CODE>*</CODE><CODE> </CODE>int<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Let<CODE> </CODE><B>of</B><CODE> </CODE>string<CODE> </CODE><CODE>*</CODE><CODE> </CODE>expression<CODE> </CODE><CODE> </CODE>;;<BR><BR><B>type</B><CODE> </CODE>line<CODE> </CODE><CODE>=</CODE><CODE> </CODE>{<CODE> </CODE>num<CODE> </CODE><CODE>:</CODE><CODE> </CODE>int<CODE> </CODE>;<CODE> </CODE>inst<CODE> </CODE><CODE>:</CODE><CODE> </CODE>instruction<CODE> </CODE>}<CODE> </CODE><CODE> </CODE>;;<BR><BR><B>type</B><CODE> </CODE>program<CODE> </CODE><CODE>=</CODE><CODE> </CODE>line<CODE> </CODE>list<CODE> </CODE><CODE> </CODE>;;<BR><BR><B>type</B><CODE> </CODE>phrase<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE> </CODE>Line<CODE> </CODE><B>of</B><CODE> </CODE>line<CODE> </CODE><CODE>|</CODE><CODE> </CODE>List<CODE> </CODE><CODE>|</CODE><CODE> </CODE>Run<CODE> </CODE><CODE>|</CODE><CODE> </CODE>End<CODE> </CODE><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>priority_ou<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><CODE> </CODE>NON<CODE> </CODE>-&gt;<CODE> </CODE><CODE>1</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>OPPOSE<CODE> </CODE>-&gt;<CODE> </CODE><CODE>7</CODE><BR><B>let</B><CODE> </CODE>priority_ob<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>MULT<CODE> </CODE><CODE>|</CODE><CODE> </CODE>DIV<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE>6</CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>PLUS<CODE> </CODE><CODE>|</CODE><CODE> </CODE>MINUS<CODE> </CODE>-&gt;<CODE> </CODE><CODE>5</CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>MOD<CODE> </CODE>-&gt;<CODE> </CODE><CODE>4</CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>EQUAL<CODE> </CODE><CODE>|</CODE><CODE> </CODE>INF<CODE> </CODE><CODE>|</CODE><CODE> </CODE>INFEQ<CODE> </CODE><CODE>|</CODE><CODE> </CODE>SUP<CODE> </CODE><CODE>|</CODE><CODE> </CODE>SUPEQ<CODE> </CODE><CODE>|</CODE><CODE> </CODE>DIFF<CODE> </CODE>-&gt;<CODE> </CODE><CODE>3</CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>AND<CODE> </CODE><CODE>|</CODE><CODE> </CODE>OR<CODE> </CODE>-&gt;<CODE> </CODE><CODE>2</CODE><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>pp_opbin<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>PLUS<CODE> </CODE>-&gt;<CODE> </CODE><CODE>"+"</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>MULT<CODE> </CODE>-&gt;<CODE> </CODE><CODE>"*"</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>MOD<CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE>"%"</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>MINUS<CODE> </CODE>-&gt;<CODE> </CODE><CODE>"-"</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>DIV<CODE> </CODE>-&gt;<CODE> </CODE><CODE>"/"</CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>EQUAL<CODE> </CODE>-&gt;<CODE> </CODE><CODE>" = "</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>INF<CODE> </CODE>-&gt;<CODE> </CODE><CODE>" &lt; "</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>INFEQ<CODE> </CODE>-&gt;<CODE> </CODE><CODE>" &lt;= "</CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>SUP<CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE>" &gt; "</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>SUPEQ<CODE> </CODE>-&gt;<CODE> </CODE><CODE>" &gt;= "</CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>DIFF<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE>" &lt;&gt; "</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>AND<CODE> </CODE>-&gt;<CODE> </CODE><CODE>" &amp; "</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>OR<CODE> </CODE>-&gt;<CODE> </CODE><CODE>" | "</CODE><CODE> </CODE><CODE> </CODE><BR><B>let</B><CODE> </CODE>pp_opunr<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><CODE> </CODE>OPPOSE<CODE> </CODE>-&gt;<CODE> </CODE><CODE>"-"</CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>NON<CODE> </CODE>-&gt;<CODE> </CODE><CODE>"!"</CODE><CODE> </CODE><CODE> </CODE>;;<BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("1_APPEND/Compilationcor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<!-- POPUP DEFINITION -->
<layer id="l__2_APPEND/Compilationcor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","2_APPEND/Compilationcor.ml.tex","");
// --></script><span style="">
 <TT>pprint.ml</TT> : 


<PRE>
<B>open</B><CODE> </CODE>Syntax;;<BR><BR><B>let</B><CODE> </CODE>parenthesis<CODE> </CODE>x<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE>"("</CODE><CODE> </CODE><CODE>^</CODE><CODE> </CODE>x<CODE> </CODE><CODE>^</CODE><CODE> </CODE><CODE>")"</CODE>;;<BR><BR><B>let</B><CODE> </CODE>pp_expression<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>ppg<CODE> </CODE>pr<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>ExpInt<CODE> </CODE>n<CODE> </CODE>-&gt;<CODE> </CODE><TT>(</TT>string_of_int<CODE> </CODE>n<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ExpVar<CODE> </CODE>v<CODE> </CODE>-&gt;<CODE> </CODE>v<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ExpStr<CODE> </CODE>s<CODE> </CODE>-&gt;<CODE> </CODE><CODE>"\""</CODE><CODE> </CODE><CODE>^</CODE><CODE> </CODE>s<CODE> </CODE><CODE>^</CODE><CODE> </CODE><CODE>"\""</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ExpUnr<CODE> </CODE><TT>(</TT>op<CODE>,</CODE>e<TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>res<CODE> </CODE><CODE>=</CODE><CODE> </CODE><TT>(</TT>pp_opunr<CODE> </CODE>op<TT>)</TT><CODE>^</CODE><TT>(</TT>ppg<CODE> </CODE><TT>(</TT>priority_ou<CODE> </CODE>op<TT>)</TT><CODE> </CODE>e<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><B>if</B><CODE> </CODE>pr<CODE>=</CODE><CODE>0</CODE><CODE> </CODE><B>then</B><CODE> </CODE>res<CODE> </CODE><B>else</B><CODE> </CODE>parenthesis<CODE> </CODE>res<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ExpBin<CODE> </CODE><TT>(</TT>e1<CODE>,</CODE>op<CODE>,</CODE>e2<TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>pr2<CODE> </CODE><CODE>=</CODE><CODE> </CODE>priority_ob<CODE> </CODE>op<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><B>let</B><CODE> </CODE>res<CODE> </CODE><CODE>=</CODE><CODE> </CODE><TT>(</TT>ppg<CODE> </CODE>pr2<CODE> </CODE>e1<TT>)</TT><CODE>^</CODE><TT>(</TT>pp_opbin<CODE> </CODE>op<TT>)</TT><CODE>^</CODE><TT>(</TT>ppd<CODE> </CODE>pr2<CODE> </CODE>e2<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(* parenthesis if the priority is not higher *)</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><B>if</B><CODE> </CODE>pr2<CODE> </CODE><CODE>&gt;=</CODE><CODE> </CODE>pr<CODE> </CODE><B>then</B><CODE> </CODE>res<CODE> </CODE><B>else</B><CODE> </CODE>parenthesis<CODE> </CODE>res<BR><CODE> </CODE><CODE> </CODE><B>and</B><CODE> </CODE>ppd<CODE> </CODE>pr<CODE> </CODE>exp<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>match</B><CODE> </CODE>exp<CODE> </CODE><B>with</B><CODE> </CODE><BR><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(*  the sub-trees could only be different *)</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(*  in their binary operators             *)</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>ExpBin<CODE> </CODE><TT>(</TT>e1<CODE>,</CODE>op<CODE>,</CODE>e2<TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>pr2<CODE> </CODE><CODE>=</CODE><CODE> </CODE>priority_ob<CODE> </CODE>op<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><B>let</B><CODE> </CODE>res<CODE> </CODE><CODE>=</CODE><CODE> </CODE><TT>(</TT>ppg<CODE> </CODE>pr2<CODE> </CODE>e1<TT>)</TT><CODE>^</CODE><TT>(</TT>pp_opbin<CODE> </CODE>op<TT>)</TT><CODE>^</CODE><TT>(</TT>ppd<CODE> </CODE>pr2<CODE> </CODE>e2<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><B>if</B><CODE> </CODE>pr2<CODE> </CODE><CODE>&gt;</CODE><CODE> </CODE>pr<CODE> </CODE><B>then</B><CODE> </CODE>res<CODE> </CODE><B>else</B><CODE> </CODE>parenthesis<CODE> </CODE>res<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>ppg<CODE> </CODE>pr<CODE> </CODE>exp<BR><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE>ppg<CODE> </CODE><CODE>0</CODE><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>pp_instruction<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Rem<CODE> </CODE>s<CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><CODE>"REM "</CODE><CODE> </CODE><CODE>^</CODE><CODE> </CODE>s<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Goto<CODE> </CODE>n<CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><CODE>"GOTO "</CODE><CODE> </CODE><CODE>^</CODE><CODE> </CODE><TT>(</TT>string_of_int<CODE> </CODE>n<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Print<CODE> </CODE>e<CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><CODE>"PRINT "</CODE><CODE> </CODE><CODE>^</CODE><CODE> </CODE><TT>(</TT>pp_expression<CODE> </CODE>e<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Input<CODE> </CODE>v<CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><CODE>"INPUT "</CODE><CODE> </CODE><CODE>^</CODE><CODE> </CODE>v<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>If<CODE> </CODE><TT>(</TT>e<CODE>,</CODE>n<TT>)</TT><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><CODE>"IF "</CODE><CODE>^</CODE><TT>(</TT>pp_expression<CODE> </CODE>e<TT>)</TT><CODE>^</CODE><CODE>" THEN "</CODE><CODE>^</CODE><TT>(</TT>string_of_int<CODE> </CODE>n<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Let<CODE> </CODE><TT>(</TT>v<CODE>,</CODE>e<TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><CODE>"LET "</CODE><CODE> </CODE><CODE>^</CODE><CODE> </CODE>v<CODE> </CODE><CODE>^</CODE><CODE> </CODE><CODE>" = "</CODE><CODE> </CODE><CODE>^</CODE><CODE> </CODE><TT>(</TT>pp_expression<CODE> </CODE>e<TT>)</TT><CODE> </CODE><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>pp_line<CODE> </CODE>l<CODE> </CODE><CODE>=</CODE><CODE> </CODE><TT>(</TT>string_of_int<CODE> </CODE>l<CODE>.</CODE>num<TT>)</TT><CODE> </CODE><CODE>^</CODE><CODE> </CODE><CODE>"  "</CODE><CODE> </CODE><CODE>^</CODE><CODE> </CODE><TT>(</TT>pp_instruction<CODE> </CODE>l<CODE>.</CODE>inst<TT>)</TT><CODE> </CODE><CODE> </CODE>;;<BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("2_APPEND/Compilationcor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<!-- POPUP DEFINITION -->
<layer id="l__3_APPEND/Compilationcor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","3_APPEND/Compilationcor.ml.tex","");
// --></script><span style="">
 <TT>alexsynt.ml</TT> : 


<PRE>
<B>open</B><CODE> </CODE>Syntax;;<BR><BR><B>type</B><CODE> </CODE>lexeme<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Lint<CODE> </CODE><B>of</B><CODE> </CODE>int<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Lident<CODE> </CODE><B>of</B><CODE> </CODE>string<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Lsymbol<CODE> </CODE><B>of</B><CODE> </CODE>string<CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Lstring<CODE> </CODE><B>of</B><CODE> </CODE>string<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Lfin<CODE> </CODE>;;<BR><BR><B>type</B><CODE> </CODE>str_lexer<CODE> </CODE><CODE>=</CODE><CODE> </CODE>{str<CODE>:</CODE>string;<CODE> </CODE><B>mutable</B><CODE> </CODE>position<CODE>:</CODE>int;<CODE> </CODE>size<CODE>:</CODE>int<CODE> </CODE>}<CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>init_lex<CODE> </CODE>s<CODE> </CODE><CODE>=</CODE><CODE> </CODE>{<CODE> </CODE>str<CODE>=</CODE>s;<CODE> </CODE>position<CODE>=</CODE><CODE>0</CODE><CODE> </CODE>;<CODE> </CODE>size<CODE>=</CODE>String.length<CODE> </CODE>s<CODE> </CODE>}<CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>advance<CODE> </CODE>cl<CODE> </CODE><CODE>=</CODE><CODE> </CODE>cl<CODE>.</CODE>position<CODE> </CODE><CODE>&lt;-</CODE><CODE> </CODE>cl<CODE>.</CODE>position<CODE>+</CODE><CODE>1</CODE><CODE> </CODE><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>advance_n<CODE> </CODE>cl<CODE> </CODE>n<CODE> </CODE><CODE>=</CODE><CODE> </CODE>cl<CODE>.</CODE>position<CODE> </CODE><CODE>&lt;-</CODE><CODE> </CODE>cl<CODE>.</CODE>position<CODE>+</CODE>n<CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>extract<CODE> </CODE>pred<CODE> </CODE>cl<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>st<CODE> </CODE><CODE>=</CODE><CODE> </CODE>cl<CODE>.</CODE>str<CODE> </CODE><B>and</B><CODE> </CODE>ct<CODE> </CODE><CODE>=</CODE><CODE> </CODE>cl<CODE>.</CODE>position<CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>ext<CODE> </CODE>n<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>if</B><CODE> </CODE>n<CODE>&lt;</CODE>cl<CODE>.</CODE>size<CODE> </CODE><CODE>&amp;&amp;</CODE><CODE> </CODE><TT>(</TT>pred<CODE> </CODE>st<CODE>.[</CODE>n<CODE>]</CODE><TT>)</TT><CODE> </CODE><B>then</B><CODE> </CODE>ext<CODE> </CODE><TT>(</TT>n<CODE>+</CODE><CODE>1</CODE><TT>)</TT><CODE> </CODE><B>else</B><CODE> </CODE>n<CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>res<CODE> </CODE><CODE>=</CODE><CODE> </CODE>ext<CODE> </CODE>ct<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE>cl<CODE>.</CODE>position<CODE> </CODE><CODE>&lt;-</CODE><CODE> </CODE>res<CODE> </CODE>;<CODE> </CODE>String.sub<CODE> </CODE>cl<CODE>.</CODE>str<CODE> </CODE>ct<CODE> </CODE><TT>(</TT>res<CODE>-</CODE>ct<TT>)</TT><CODE> </CODE><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>extract_int<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>is_integer<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><CODE> </CODE><CODE>'0'</CODE><CODE>..</CODE><CODE>'9'</CODE><CODE> </CODE>-&gt;<CODE> </CODE><B>true</B><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE><B>false</B><CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><B>function</B><CODE> </CODE>cl<CODE> </CODE>-&gt;<CODE> </CODE>int_of_string<CODE> </CODE><TT>(</TT>extract<CODE> </CODE>is_integer<CODE> </CODE>cl<TT>)</TT><BR><B>let</B><CODE> </CODE>extract_ident<CODE> </CODE><CODE>=</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>is_alpha_num<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>'a'</CODE><CODE>..</CODE><CODE>'z'</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'A'</CODE><CODE>..</CODE><CODE>'Z'</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'0'</CODE><CODE> </CODE><CODE>..</CODE><CODE> </CODE><CODE>'9'</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'_'</CODE><CODE> </CODE>-&gt;<CODE> </CODE><B>true</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE><B>false</B><CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE>extract<CODE> </CODE>is_alpha_num<CODE> </CODE>;;<BR><BR><B>exception</B><CODE> </CODE>LexerError<CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE><CODE> </CODE><B>rec</B><CODE> </CODE>lexer<CODE> </CODE>cl<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>lexer_char<CODE> </CODE>c<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>match</B><CODE> </CODE>c<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>' '</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'\t'</CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE>advance<CODE> </CODE>cl<CODE> </CODE>;<CODE> </CODE>lexer<CODE> </CODE>cl<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'a'</CODE><CODE>..</CODE><CODE>'z'</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'A'</CODE><CODE>..</CODE><CODE>'Z'</CODE><CODE> </CODE>-&gt;<CODE> </CODE>Lident<CODE> </CODE><TT>(</TT>extract_ident<CODE> </CODE>cl<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'0'</CODE><CODE>..</CODE><CODE>'9'</CODE><CODE> </CODE>-&gt;<CODE> </CODE>Lint<CODE> </CODE><TT>(</TT>extract_int<CODE> </CODE>cl<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'"'</CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE>advance<CODE> </CODE>cl<CODE> </CODE>;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>res<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Lstring<CODE> </CODE><TT>(</TT>extract<CODE> </CODE><TT>(</TT><TT>(</TT><CODE>&lt;&gt;</CODE><TT>)</TT><CODE> </CODE><CODE>'"'</CODE><TT>)</TT><CODE> </CODE>cl<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE>advance<CODE> </CODE>cl<CODE> </CODE>;<CODE> </CODE>res<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'+'</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'-'</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'*'</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'/'</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'%'</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'&amp;'</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'|'</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'!'</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'='</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'('</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>')'</CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>advance<CODE> </CODE>cl;<CODE> </CODE>Lsymbol<CODE> </CODE><TT>(</TT>String.make<CODE> </CODE><CODE>1</CODE><CODE> </CODE>c<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'&lt;'</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>'&gt;'</CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE>advance<CODE> </CODE>cl;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>cl<CODE>.</CODE>position<CODE> </CODE><CODE>&gt;=</CODE><CODE> </CODE>cl<CODE>.</CODE>size<CODE> </CODE><B>then</B><CODE> </CODE>Lsymbol<CODE> </CODE><TT>(</TT>String.make<CODE> </CODE><CODE>1</CODE><CODE> </CODE>c<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>cs<CODE> </CODE><CODE>=</CODE><CODE> </CODE>cl<CODE>.</CODE>str<CODE>.[</CODE>cl<CODE>.</CODE>position<CODE>]</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><TT>(</TT><CODE> </CODE><B>match</B><CODE> </CODE><TT>(</TT>c<CODE>,</CODE>cs<TT>)</TT><CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><TT>(</TT><CODE>'&lt;'</CODE><CODE>,</CODE><CODE>'='</CODE><TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE>advance<CODE> </CODE>cl;<CODE> </CODE>Lsymbol<CODE> </CODE><CODE>"&lt;="</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><TT>(</TT><CODE>'&gt;'</CODE><CODE>,</CODE><CODE>'='</CODE><TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE>advance<CODE> </CODE>cl;<CODE> </CODE>Lsymbol<CODE> </CODE><CODE>"&gt;="</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><TT>(</TT><CODE>'&lt;'</CODE><CODE>,</CODE><CODE>'&gt;'</CODE><TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE>advance<CODE> </CODE>cl;<CODE> </CODE>Lsymbol<CODE> </CODE><CODE>"&lt;&gt;"</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE>Lsymbol<CODE> </CODE><TT>(</TT>String.make<CODE> </CODE><CODE>1</CODE><CODE> </CODE>c<TT>)</TT><CODE> </CODE><TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>LexerError<BR><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>cl<CODE>.</CODE>position<CODE> </CODE><CODE>&gt;=</CODE><CODE> </CODE>cl<CODE>.</CODE>size<CODE> </CODE><B>then</B><CODE> </CODE>Lfin<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE>lexer_char<CODE> </CODE>cl<CODE>.</CODE>str<CODE>.[</CODE>cl<CODE>.</CODE>position<CODE>]</CODE><CODE> </CODE>;;<BR><BR><B>type</B><CODE> </CODE>exp_elem<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Texp<CODE> </CODE><B>of</B><CODE> </CODE>expression<CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(* expression         *)</CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Tbin<CODE> </CODE><B>of</B><CODE> </CODE>op_bin<CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(* binary operator    *)</CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Tunr<CODE> </CODE><B>of</B><CODE> </CODE>op_unr<CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(* unary operator     *)</CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Tpg<CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(* right parenthesis  *)</CODE><CODE> </CODE>;;<BR><BR><B>exception</B><CODE> </CODE>ParseError<CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>symb_unr<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>"!"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>NON<CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"-"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>OPPOSE<CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>ParseError<CODE> </CODE><BR><B>let</B><CODE> </CODE>symb_bin<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>"+"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>PLUS<CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"-"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>MINUS<CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"*"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>MULT<CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"/"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>DIV<CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"%"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>MOD<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"="</CODE><CODE> </CODE>-&gt;<CODE> </CODE>EQUAL<CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"&lt;"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>INF<CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"&lt;="</CODE><CODE> </CODE>-&gt;<CODE> </CODE>INFEQ<CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"&gt;"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>SUP<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"&gt;="</CODE><CODE> </CODE>-&gt;<CODE> </CODE>SUPEQ<CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"&lt;&gt;"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>DIFF<CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"&amp;"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>AND<CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"|"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>OR<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>ParseError<CODE> </CODE><BR><B>let</B><CODE> </CODE>tsymb<CODE> </CODE>s<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>try</B><CODE> </CODE>Tbin<CODE> </CODE><TT>(</TT>symb_bin<CODE> </CODE>s<TT>)</TT><CODE> </CODE><B>with</B><CODE> </CODE>ParseError<CODE> </CODE>-&gt;<CODE> </CODE>Tunr<CODE> </CODE><TT>(</TT>symb_unr<CODE> </CODE>s<TT>)</TT><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>reduce<CODE> </CODE>pr<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><TT>(</TT>Texp<CODE> </CODE>e<TT>)</TT>::<TT>(</TT>Tunr<CODE> </CODE>op<TT>)</TT>::st<CODE> </CODE><CODE> </CODE><B>when</B><CODE> </CODE><CODE> </CODE><TT>(</TT>priority_ou<CODE> </CODE>op<TT>)</TT><CODE> </CODE><CODE>&gt;=</CODE><CODE> </CODE>pr<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><TT>(</TT>Texp<CODE> </CODE><TT>(</TT>ExpUnr<CODE> </CODE><TT>(</TT>op<CODE>,</CODE>e<TT>)</TT><TT>)</TT><TT>)</TT>::st<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><TT>(</TT>Texp<CODE> </CODE>e1<TT>)</TT>::<TT>(</TT>Tbin<CODE> </CODE>op<TT>)</TT>::<TT>(</TT>Texp<CODE> </CODE>e2<TT>)</TT>::st<CODE> </CODE><CODE> </CODE><B>when</B><CODE> </CODE><CODE> </CODE><TT>(</TT>priority_ob<CODE> </CODE>op<TT>)</TT><CODE> </CODE><CODE>&gt;=</CODE><CODE> </CODE>pr<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><TT>(</TT>Texp<CODE> </CODE><TT>(</TT>ExpBin<CODE> </CODE><TT>(</TT>e2<CODE>,</CODE>op<CODE>,</CODE>e1<TT>)</TT><TT>)</TT><TT>)</TT>::st<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>ParseError<CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>pile_or_reduce<CODE> </CODE>lex<CODE> </CODE>stack<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>match</B><CODE> </CODE>lex<CODE> </CODE><CODE>,</CODE><CODE> </CODE>stack<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Lint<CODE> </CODE>n<CODE> </CODE><CODE>,</CODE><CODE> </CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><TT>(</TT>Texp<CODE> </CODE><TT>(</TT>ExpInt<CODE> </CODE>n<TT>)</TT><TT>)</TT>::stack<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Lident<CODE> </CODE>v<CODE> </CODE><CODE>,</CODE><CODE> </CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><TT>(</TT>Texp<CODE> </CODE><TT>(</TT>ExpVar<CODE> </CODE>v<TT>)</TT><TT>)</TT>::stack<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Lstring<CODE> </CODE>s<CODE> </CODE><CODE>,</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><TT>(</TT>Texp<CODE> </CODE><TT>(</TT>ExpStr<CODE> </CODE>s<TT>)</TT><TT>)</TT>::stack<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Lsymbol<CODE> </CODE><CODE>"("</CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Tpg::stack<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Lsymbol<CODE> </CODE><CODE>")"</CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE><TT>(</TT>Texp<CODE> </CODE>e<TT>)</TT>::Tpg::st<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><TT>(</TT>Texp<CODE> </CODE>e<TT>)</TT>::st<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Lsymbol<CODE> </CODE><CODE>")"</CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>pile_or_reduce<CODE> </CODE>lex<CODE> </CODE><TT>(</TT>reduce<CODE> </CODE><CODE>0</CODE><CODE> </CODE>stack<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Lsymbol<CODE> </CODE>s<CODE> </CODE><CODE>,</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><B>let</B><CODE> </CODE>symbole<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>s<CODE>&lt;&gt;</CODE><CODE>"-"</CODE><CODE> </CODE><B>then</B><CODE> </CODE>tsymb<CODE> </CODE>s<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(* resolve the ambiguity of the symbol ``-''   *)</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(* follow the stack (i.e last exp_elem pile)  *)</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE><B>match</B><CODE> </CODE>stack<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>with</B><CODE> </CODE><TT>(</TT>Texp<CODE> </CODE><CODE>_</CODE><TT>)</TT><CODE>::_</CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Tbin<CODE> </CODE>MINUS<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Tunr<CODE> </CODE>OPPOSE<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><TT>(</TT><CODE> </CODE><B>match</B><CODE> </CODE>symbole<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Tunr<CODE> </CODE>op<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><TT>(</TT>Tunr<CODE> </CODE>op<TT>)</TT>::stack<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Tbin<CODE> </CODE>op<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><TT>(</TT><CODE> </CODE><B>try</B><CODE> </CODE>pile_or_reduce<CODE> </CODE>lex<CODE> </CODE><TT>(</TT>reduce<CODE> </CODE><TT>(</TT>priority_ob<CODE> </CODE>op<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>stack<CODE> </CODE><TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>with</B><CODE> </CODE>ParseError<CODE> </CODE>-&gt;<CODE> </CODE><TT>(</TT>Tbin<CODE> </CODE>op<TT>)</TT>::stack<CODE> </CODE><TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>ParseError<CODE> </CODE><TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>ParseError<CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>reduce_all<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>[]<CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>ParseError<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>[</CODE>Texp<CODE> </CODE>x<CODE>]</CODE><CODE> </CODE>-&gt;<CODE> </CODE>x<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>st<CODE> </CODE>-&gt;<CODE> </CODE>reduce_all<CODE> </CODE><TT>(</TT>reduce<CODE> </CODE><CODE>0</CODE><CODE> </CODE>st<TT>)</TT><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>parse_exp<CODE> </CODE>fin<CODE> </CODE>cl<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>p<CODE> </CODE><CODE>=</CODE><CODE> </CODE>ref<CODE> </CODE><CODE>0</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>parse_un<CODE> </CODE>stack<CODE> </CODE><CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>l<CODE> </CODE><CODE>=</CODE><CODE> </CODE><TT>(</TT><CODE> </CODE>p<CODE>:=</CODE>cl<CODE>.</CODE>position<CODE> </CODE>;<CODE> </CODE>lexer<CODE> </CODE>cl<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><B>if</B><CODE> </CODE>not<CODE> </CODE><TT>(</TT>fin<CODE> </CODE>l<TT>)</TT><CODE> </CODE><B>then</B><CODE> </CODE>parse_un<CODE> </CODE><TT>(</TT>pile_or_reduce<CODE> </CODE>l<CODE> </CODE>stack<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE><TT>(</TT><CODE> </CODE>cl<CODE>.</CODE>position<CODE> </CODE><CODE>&lt;-</CODE><CODE> </CODE><CODE>!</CODE>p<CODE> </CODE>;<CODE> </CODE>reduce_all<CODE> </CODE>stack<CODE> </CODE><TT>)</TT><BR><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE>parse_un<CODE> </CODE>[]<CODE> </CODE><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>parse_inst<CODE> </CODE>cl<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>match</B><CODE> </CODE>lexer<CODE> </CODE>cl<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Lident<CODE> </CODE>s<CODE> </CODE>-&gt;<CODE> </CODE><TT>(</TT><CODE> </CODE><B>match</B><CODE> </CODE>s<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>"REM"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>Rem<CODE> </CODE><TT>(</TT>extract<CODE> </CODE><TT>(</TT><B>fun</B><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE><B>true</B><TT>)</TT><CODE> </CODE>cl<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"GOTO"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>Goto<CODE> </CODE><TT>(</TT><B>match</B><CODE> </CODE>lexer<CODE> </CODE>cl<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Lint<CODE> </CODE>p<CODE> </CODE>-&gt;<CODE> </CODE>p<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>ParseError<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"INPUT"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>Input<CODE> </CODE><TT>(</TT><B>match</B><CODE> </CODE>lexer<CODE> </CODE>cl<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Lident<CODE> </CODE>v<CODE> </CODE>-&gt;<CODE> </CODE>v<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>ParseError<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"PRINT"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>Print<CODE> </CODE><TT>(</TT>parse_exp<CODE> </CODE><TT>(</TT><TT>(</TT><CODE>=</CODE><TT>)</TT><CODE> </CODE>Lfin<TT>)</TT><CODE> </CODE>cl<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"LET"</CODE><CODE> </CODE>-&gt;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>l2<CODE> </CODE><CODE>=</CODE><CODE> </CODE>lexer<CODE> </CODE>cl<CODE> </CODE><B>and</B><CODE> </CODE>l3<CODE> </CODE><CODE>=</CODE><CODE> </CODE>lexer<CODE> </CODE>cl<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><TT>(</TT><CODE> </CODE><B>match</B><CODE> </CODE>l2<CODE> </CODE><CODE>,</CODE>l3<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><TT>(</TT>Lident<CODE> </CODE>v<CODE>,</CODE>Lsymbol<CODE> </CODE><CODE>"="</CODE><TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE>Let<CODE> </CODE><TT>(</TT>v<CODE>,</CODE>parse_exp<CODE> </CODE><TT>(</TT><TT>(</TT><CODE>=</CODE><TT>)</TT><CODE> </CODE>Lfin<TT>)</TT><CODE> </CODE>cl<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>ParseError<CODE> </CODE><TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>"IF"</CODE><CODE> </CODE>-&gt;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>test<CODE> </CODE><CODE>=</CODE><CODE> </CODE>parse_exp<CODE> </CODE><TT>(</TT><TT>(</TT><CODE>=</CODE><TT>)</TT><CODE> </CODE><TT>(</TT>Lident<CODE> </CODE><CODE>"THEN"</CODE><TT>)</TT><TT>)</TT><CODE> </CODE>cl<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><TT>(</TT><CODE> </CODE><B>match</B><CODE> </CODE>ignore<CODE> </CODE><TT>(</TT>lexer<CODE> </CODE>cl<TT>)</TT><CODE> </CODE>;<CODE> </CODE>lexer<CODE> </CODE>cl<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Lint<CODE> </CODE>n<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>If<CODE> </CODE><TT>(</TT>test<CODE>,</CODE>n<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>ParseError<CODE> </CODE><TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>ParseError<CODE> </CODE><TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>ParseError<CODE> </CODE><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>parse<CODE> </CODE>str<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>cl<CODE> </CODE><CODE>=</CODE><CODE> </CODE>init_lex<CODE> </CODE>str<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><B>match</B><CODE> </CODE>lexer<CODE> </CODE>cl<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Lint<CODE> </CODE>n<CODE> </CODE>-&gt;<CODE> </CODE>Line<CODE> </CODE>{<CODE> </CODE>num<CODE>=</CODE>n<CODE> </CODE>;<CODE> </CODE>inst<CODE>=</CODE>parse_inst<CODE> </CODE>cl<CODE> </CODE>}<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Lident<CODE> </CODE><CODE>"LIST"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>List<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Lident<CODE> </CODE><CODE>"RUN"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>Run<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Lident<CODE> </CODE><CODE>"END"</CODE><CODE> </CODE>-&gt;<CODE> </CODE>End<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>ParseError<CODE> </CODE><CODE> </CODE>;;<BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("3_APPEND/Compilationcor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<!-- POPUP DEFINITION -->
<layer id="l__4_APPEND/Compilationcor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","4_APPEND/Compilationcor.ml.tex","");
// --></script><span style="">
 <TT>eval.ml</TT> : 


<PRE>
<B>open</B><CODE> </CODE>Syntax;;<BR><B>open</B><CODE> </CODE>Pprint;;<BR><B>open</B><CODE> </CODE>Alexsynt;;<BR><BR><B>type</B><CODE> </CODE>vl<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Vint<CODE> </CODE><B>of</B><CODE> </CODE>int<CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vstr<CODE> </CODE><B>of</B><CODE> </CODE>string<CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vbool<CODE> </CODE><B>of</B><CODE> </CODE>bool<CODE> </CODE><CODE> </CODE>;;<BR><BR><B>type</B><CODE> </CODE>environment<CODE> </CODE><CODE>=</CODE><CODE> </CODE><TT>(</TT>string<CODE> </CODE><CODE>*</CODE><CODE> </CODE>vl<TT>)</TT><CODE> </CODE>list<CODE> </CODE>;;<BR><BR><B>type</B><CODE> </CODE>state<CODE> </CODE><CODE>=</CODE><CODE> </CODE>{<CODE> </CODE>line<CODE>:</CODE>int<CODE> </CODE>;<CODE> </CODE>prog<CODE>:</CODE>program<CODE> </CODE>;<CODE> </CODE>env<CODE>:</CODE>environment<CODE> </CODE>}<CODE> </CODE>;;<BR><BR><B>exception</B><CODE> </CODE>RunError<CODE> </CODE><B>of</B><CODE> </CODE>int<CODE> </CODE><BR><B>let</B><CODE> </CODE>runerr<CODE> </CODE>n<CODE> </CODE><CODE>=</CODE><CODE> </CODE>raise<CODE> </CODE><TT>(</TT>RunError<CODE> </CODE>n<TT>)</TT><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>eval_exp<CODE> </CODE>n<CODE> </CODE>envt<CODE> </CODE>expr<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>match</B><CODE> </CODE>expr<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>ExpInt<CODE> </CODE>p<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vint<CODE> </CODE>p<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ExpVar<CODE> </CODE>v<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><TT>(</TT><CODE> </CODE><B>try</B><CODE> </CODE>List.assoc<CODE> </CODE>v<CODE> </CODE>envt<CODE> </CODE><B>with</B><CODE> </CODE>Not_found<CODE> </CODE>-&gt;<CODE> </CODE>runerr<CODE> </CODE>n<CODE> </CODE><TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ExpUnr<CODE> </CODE><TT>(</TT>OPPOSE<CODE>,</CODE>e<TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><TT>(</TT><CODE> </CODE><B>match</B><CODE> </CODE>eval_exp<CODE> </CODE>n<CODE> </CODE>envt<CODE> </CODE>e<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Vint<CODE> </CODE>p<CODE> </CODE>-&gt;<CODE> </CODE>Vint<CODE> </CODE><TT>(</TT><CODE>-</CODE>p<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>runerr<CODE> </CODE>n<CODE> </CODE><TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ExpUnr<CODE> </CODE><TT>(</TT>NON<CODE>,</CODE>e<TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><TT>(</TT><CODE> </CODE><B>match</B><CODE> </CODE>eval_exp<CODE> </CODE>n<CODE> </CODE>envt<CODE> </CODE>e<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Vbool<CODE> </CODE>p<CODE> </CODE>-&gt;<CODE> </CODE>Vbool<CODE> </CODE><TT>(</TT>not<CODE> </CODE>p<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>runerr<CODE> </CODE>n<CODE> </CODE><TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ExpStr<CODE> </CODE>s<CODE> </CODE>-&gt;<CODE> </CODE>Vstr<CODE> </CODE>s<CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ExpBin<CODE> </CODE><TT>(</TT>e1<CODE>,</CODE>op<CODE>,</CODE>e2<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><B>match</B><CODE> </CODE>eval_exp<CODE> </CODE>n<CODE> </CODE>envt<CODE> </CODE>e1<CODE> </CODE><CODE>,</CODE><CODE> </CODE>op<CODE> </CODE><CODE>,</CODE><CODE> </CODE>eval_exp<CODE> </CODE>n<CODE> </CODE>envt<CODE> </CODE>e2<CODE> </CODE><B>with</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Vint<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE>PLUS<CODE> </CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vint<CODE> </CODE>v2<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vint<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><CODE>+</CODE><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vint<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE>MINUS<CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vint<CODE> </CODE>v2<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vint<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><CODE>-</CODE><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vint<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE>MULT<CODE> </CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vint<CODE> </CODE>v2<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vint<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><CODE>*</CODE><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vint<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE><CODE> </CODE>DIV<CODE> </CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vint<CODE> </CODE>v2<CODE> </CODE><CODE> </CODE><B>when</B><CODE> </CODE>v2<CODE>&lt;&gt;</CODE><CODE>0</CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vint<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><CODE>/</CODE><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vint<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE><CODE> </CODE>MOD<CODE> </CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vint<CODE> </CODE>v2<CODE> </CODE><CODE> </CODE><B>when</B><CODE> </CODE>v2<CODE>&lt;&gt;</CODE><CODE>0</CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vint<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><B>mod</B><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vint<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE>EQUAL<CODE> </CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vint<CODE> </CODE>v2<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vbool<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><CODE>=</CODE><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vint<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE>DIFF<CODE> </CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vint<CODE> </CODE>v2<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vbool<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><CODE>&lt;&gt;</CODE><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vint<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE><CODE> </CODE>INF<CODE> </CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vint<CODE> </CODE>v2<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vbool<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><CODE>&lt;</CODE><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vint<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE><CODE> </CODE>SUP<CODE> </CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vint<CODE> </CODE>v2<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vbool<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><CODE>&gt;</CODE><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vint<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE>INFEQ<CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vint<CODE> </CODE>v2<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vbool<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><CODE>&lt;=</CODE><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vint<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE>SUPEQ<CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vint<CODE> </CODE>v2<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vbool<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><CODE>&gt;=</CODE><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vbool<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE>AND<CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vbool<CODE> </CODE>v2<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vbool<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><CODE>&amp;&amp;</CODE><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vbool<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE>OR<CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vbool<CODE> </CODE>v2<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>Vbool<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><CODE>||</CODE><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vstr<CODE> </CODE>v1<CODE> </CODE><CODE>,</CODE><CODE> </CODE>PLUS<CODE> </CODE><CODE>,</CODE><CODE> </CODE>Vstr<CODE> </CODE>v2<CODE> </CODE>-&gt;<CODE> </CODE>Vstr<CODE> </CODE><TT>(</TT>v1<CODE> </CODE><CODE>^</CODE><CODE> </CODE>v2<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE><CODE>,</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE>runerr<CODE> </CODE>n<CODE> </CODE><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>add<CODE> </CODE>v<CODE> </CODE>e<CODE> </CODE>env<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>match</B><CODE> </CODE>env<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>[]<CODE> </CODE>-&gt;<CODE> </CODE><CODE>[</CODE>v<CODE>,</CODE>e<CODE>]</CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><TT>(</TT>w<CODE>,</CODE>f<TT>)</TT>::l<CODE> </CODE>-&gt;<CODE> </CODE><B>if</B><CODE> </CODE>w<CODE>=</CODE>v<CODE> </CODE><B>then</B><CODE> </CODE><TT>(</TT>v<CODE>,</CODE>e<TT>)</TT>::l<CODE> </CODE><B>else</B><CODE> </CODE><TT>(</TT>w<CODE>,</CODE>f<TT>)</TT>::<TT>(</TT>add<CODE> </CODE>v<CODE> </CODE>e<CODE> </CODE>l<TT>)</TT><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>goto_line<CODE> </CODE>n<CODE> </CODE>prog<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>match</B><CODE> </CODE>prog<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>[]<CODE> </CODE>-&gt;<CODE> </CODE>runerr<CODE> </CODE>n<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>l::ll<CODE> </CODE>-&gt;<CODE> </CODE><B>if</B><CODE> </CODE>l<CODE>.</CODE>num<CODE> </CODE><CODE>=</CODE><CODE> </CODE>n<CODE> </CODE><B>then</B><CODE> </CODE>prog<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE><B>if</B><CODE> </CODE>l<CODE>.</CODE>num<CODE>&lt;</CODE>n<CODE> </CODE><B>then</B><CODE> </CODE>goto_line<CODE> </CODE>n<CODE> </CODE>ll<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE>runerr<CODE> </CODE>n<CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>print_vl<CODE> </CODE>v<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>match</B><CODE> </CODE>v<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Vint<CODE> </CODE>n<CODE> </CODE>-&gt;<CODE> </CODE>print_int<CODE> </CODE>n<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vbool<CODE> </CODE><B>true</B><CODE> </CODE>-&gt;<CODE> </CODE>print_string<CODE> </CODE><CODE>"true"</CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vbool<CODE> </CODE><B>false</B><CODE> </CODE>-&gt;<CODE> </CODE>print_string<CODE> </CODE><CODE>"false"</CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vstr<CODE> </CODE>s<CODE> </CODE>-&gt;<CODE> </CODE>print_string<CODE> </CODE>s<CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>eval_inst<CODE> </CODE>state<CODE> </CODE><CODE>=</CODE><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>lc<CODE>,</CODE><CODE> </CODE>ns<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>match</B><CODE> </CODE>goto_line<CODE> </CODE>state<CODE>.</CODE>line<CODE> </CODE>state<CODE>.</CODE>prog<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>[]<CODE> </CODE>-&gt;<CODE> </CODE>failwith<CODE> </CODE><CODE>"empty program"</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>lc<CODE>::[]</CODE><CODE> </CODE>-&gt;<CODE> </CODE>lc<CODE>,-</CODE><CODE>1</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>lc::ls<CODE>::_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>lc<CODE>,</CODE>ls<CODE>.</CODE>num<BR><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>match</B><CODE> </CODE>lc<CODE>.</CODE>inst<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Rem<CODE> </CODE><CODE>_</CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>{<CODE> </CODE>state<CODE> </CODE><B>with</B><CODE> </CODE>line<CODE>=</CODE>ns<CODE> </CODE>}<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Print<CODE> </CODE>e<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>print_vl<CODE> </CODE><TT>(</TT>eval_exp<CODE> </CODE>lc<CODE>.</CODE>num<CODE> </CODE>state<CODE>.</CODE>env<CODE> </CODE>e<TT>)</TT><CODE> </CODE>;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>print_newline<CODE> </CODE>()<CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>{<CODE> </CODE>state<CODE> </CODE><B>with</B><CODE> </CODE>line<CODE>=</CODE>ns<CODE> </CODE>}<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Let<TT>(</TT>v<CODE>,</CODE>e<TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>ev<CODE> </CODE><CODE>=</CODE><CODE> </CODE>eval_exp<CODE> </CODE>lc<CODE>.</CODE>num<CODE> </CODE>state<CODE>.</CODE>env<CODE> </CODE>e<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE>{<CODE> </CODE>state<CODE> </CODE><B>with</B><CODE> </CODE>line<CODE>=</CODE>ns;<CODE> </CODE>env<CODE>=</CODE>add<CODE> </CODE>v<CODE> </CODE>ev<CODE> </CODE>state<CODE>.</CODE>env<CODE> </CODE>}<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Goto<CODE> </CODE>n<CODE> </CODE><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE>{<CODE> </CODE>state<CODE> </CODE><B>with</B><CODE> </CODE>line<CODE>=</CODE>n<CODE> </CODE>}<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Input<CODE> </CODE>v<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>x<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>try</B><CODE> </CODE>read_int<CODE> </CODE>()<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>with</B><CODE> </CODE>Failure<CODE> </CODE><CODE>"int_of_string"</CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE>0</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE>{<CODE> </CODE>state<CODE> </CODE><B>with</B><CODE> </CODE>line<CODE>=</CODE>ns<CODE> </CODE>;<CODE> </CODE>env<CODE>=</CODE>add<CODE> </CODE>v<CODE> </CODE><TT>(</TT>Vint<CODE> </CODE>x<TT>)</TT><CODE> </CODE>state<CODE>.</CODE>env<CODE> </CODE>}<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>If<CODE> </CODE><TT>(</TT>t<CODE>,</CODE>n<TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE><CODE> </CODE><B>match</B><CODE> </CODE>eval_exp<CODE> </CODE>lc<CODE>.</CODE>num<CODE> </CODE>state<CODE>.</CODE>env<CODE> </CODE>t<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Vbool<CODE> </CODE><B>true</B><CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE>{<CODE> </CODE>state<CODE> </CODE><B>with</B><CODE> </CODE>line<CODE>=</CODE>n<CODE> </CODE>}<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Vbool<CODE> </CODE><B>false</B><CODE> </CODE>-&gt;<CODE> </CODE>{<CODE> </CODE>state<CODE> </CODE><B>with</B><CODE> </CODE>line<CODE>=</CODE>ns<CODE> </CODE>}<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>runerr<CODE> </CODE>n<CODE> </CODE><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>run<CODE> </CODE>state<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><B>if</B><CODE> </CODE>state<CODE>.</CODE>line<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE>-</CODE><CODE>1</CODE><CODE> </CODE><B>then</B><CODE> </CODE>state<CODE> </CODE><B>else</B><CODE> </CODE>run<CODE> </CODE><TT>(</TT>eval_inst<CODE> </CODE>state<TT>)</TT><CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>insert<CODE> </CODE>line<CODE> </CODE>p<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>match</B><CODE> </CODE>p<CODE> </CODE><B>with</B><CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>[]<CODE> </CODE>-&gt;<CODE> </CODE><CODE>[</CODE>line<CODE>]</CODE><BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>l::prog<CODE> </CODE>-&gt;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>l<CODE>.</CODE>num<CODE> </CODE><CODE>&lt;</CODE><CODE> </CODE>line<CODE>.</CODE>num<CODE> </CODE><B>then</B><CODE> </CODE>l::<TT>(</TT>insert<CODE> </CODE>line<CODE> </CODE>prog<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE><B>if</B><CODE> </CODE>l<CODE>.</CODE>num<CODE>=</CODE>line<CODE>.</CODE>num<CODE> </CODE><B>then</B><CODE> </CODE>line::prog<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE>line::l::prog<CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>print_prog<CODE> </CODE>state<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>print_line<CODE> </CODE>x<CODE> </CODE><CODE>=</CODE><CODE> </CODE>print_string<CODE> </CODE><TT>(</TT>pp_line<CODE> </CODE>x<TT>)</TT><CODE> </CODE>;<CODE> </CODE>print_newline<CODE> </CODE>()<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE>print_newline<CODE> </CODE>()<CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>List.iter<CODE> </CODE>print_line<CODE> </CODE>state<CODE>.</CODE>prog<CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>print_newline<CODE> </CODE>()<CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>premiere_line<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><CODE> </CODE>[]<CODE> </CODE>-&gt;<CODE> </CODE><CODE>0</CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>i<CODE>::_</CODE><CODE> </CODE>-&gt;<CODE> </CODE>i<CODE>.</CODE>num<CODE> </CODE><CODE> </CODE>;;<BR><BR><B>exception</B><CODE> </CODE>Fin<BR><B>let</B><CODE> </CODE>one_command<CODE> </CODE>state<CODE> </CODE><CODE>=</CODE><BR><CODE> </CODE><CODE> </CODE>print_string<CODE> </CODE><CODE>"&gt; "</CODE><CODE> </CODE>;<CODE> </CODE>flush<CODE> </CODE>stdout<CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><B>try</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>match</B><CODE> </CODE>parse<CODE> </CODE><TT>(</TT>input_line<CODE> </CODE>stdin<TT>)</TT><CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Line<CODE> </CODE>l<CODE> </CODE>-&gt;<CODE> </CODE>{<CODE> </CODE>state<CODE> </CODE><B>with</B><CODE> </CODE>prog<CODE>=</CODE>insert<CODE> </CODE>l<CODE> </CODE>state<CODE>.</CODE>prog<CODE> </CODE>}<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>List<CODE> </CODE><CODE> </CODE>-&gt;<CODE> </CODE><TT>(</TT>print_prog<CODE> </CODE>state<CODE> </CODE>;<CODE> </CODE>state<CODE> </CODE><TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>Run<CODE> </CODE>-&gt;<CODE> </CODE>run<CODE> </CODE>{state<CODE> </CODE><B>with</B><CODE> </CODE>line<CODE> </CODE><CODE>=</CODE><CODE> </CODE>premiere_line<CODE> </CODE>state<CODE>.</CODE>prog}<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>End<CODE> </CODE>-&gt;<CODE> </CODE>raise<CODE> </CODE>Fin<BR><CODE> </CODE><CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>LexerError<CODE> </CODE>-&gt;<CODE> </CODE>print_string<CODE> </CODE><CODE>"Illegal character\n"</CODE>;<CODE> </CODE>state<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>ParseError<CODE> </CODE>-&gt;<CODE> </CODE>print_string<CODE> </CODE><CODE>"syntax error\n"</CODE>;<CODE> </CODE>state<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>RunError<CODE> </CODE>n<CODE> </CODE>-&gt;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>print_string<CODE> </CODE><CODE>"runtime error at line "</CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>print_int<CODE> </CODE>n<CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>print_string<CODE> </CODE><CODE>"\n"</CODE>;<CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>state<CODE> </CODE>;;<BR><BR><B>let</B><CODE> </CODE>go<CODE> </CODE>()<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><B>try</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE>print_string<CODE> </CODE><CODE>"Mini-BASIC version 0.1\n\n"</CODE>;<BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>loop<CODE> </CODE>state<CODE> </CODE><CODE>=</CODE><CODE> </CODE>loop<CODE> </CODE><TT>(</TT>one_command<CODE> </CODE>state<TT>)</TT><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>loop<CODE> </CODE>{<CODE> </CODE>line<CODE>=</CODE><CODE>0</CODE>;<CODE> </CODE>prog<CODE>=[]</CODE>;<CODE> </CODE>env<CODE>=[]</CODE><CODE> </CODE>}<BR><B>with</B><CODE> </CODE>Fin<CODE> </CODE>-&gt;<CODE> </CODE>print_string<CODE> </CODE><CODE>"A bient�t...\n"</CODE>;;<BR><BR><BR><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("4_APPEND/Compilationcor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><script language="JavaScript"><!--
  initializePreviousHints();
// --></script><script language="JavaScript"><!--
  initializePreviousHints();
// --></script><script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> <A id="a179__5_APPEND/Compilationcor.ml.tex" href="javascript: void showMessage('5_APPEND/Compilationcor.ml.tex')" class="mousable"><SPAN style=""><!-- 5,APPEND/Compilationcor.ml.tex,basic-compilation -->Compile</SPAN></A> all files separately. 
<!-- POPUP DEFINITION -->
<layer id="l__5_APPEND/Compilationcor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","5_APPEND/Compilationcor.ml.tex","");
// --></script><span style="">
 <PRE>
$ ocamlc -c syntax.ml 
$ ocamlc -c pprint.ml
$ ocamlc -c alexsynt.ml
$ ocamlc -c eval.ml
</PRE></span><script language="JavaScript"><!--
  closePopUp("5_APPEND/Compilationcor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> Add a file <TT><A id="a180__6_APPEND/Compilationcor.ml.tex" href="javascript: void showMessage('6_APPEND/Compilationcor.ml.tex')" class="mousable"><SPAN style=""><!-- 6,APPEND/Compilationcor.ml.tex,basic-main -->mainbasic.ml</SPAN></A></TT>  
which contains only the statement for calling the main function.
<!-- POPUP DEFINITION -->
<layer id="l__6_APPEND/Compilationcor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","6_APPEND/Compilationcor.ml.tex","");
// --></script><span style="">
 <TT>mainbasic.ml</TT> : 


<PRE>
<B>open</B><CODE> </CODE>Eval;;<BR><BR>go<CODE> </CODE>();;

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("6_APPEND/Compilationcor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> Create a new toplevel with the name <TT><A id="a181__7_APPEND/Compilationcor.ml.tex" href="javascript: void showMessage('7_APPEND/Compilationcor.ml.tex')" class="mousable"><SPAN style=""><!-- 7,APPEND/Compilationcor.ml.tex,basic-toplevel -->topbasic</SPAN></A></TT>, which starts the Basic interpreter. 
<!-- POPUP DEFINITION -->
<layer id="l__7_APPEND/Compilationcor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","7_APPEND/Compilationcor.ml.tex","");
// --></script><span style="">
 cr�ation du toplevel : 
<PRE>
$ ocamlmktop -o topbasic syntax.cmo pprint.cmo alexsynt.cmo eval.cmo mainbasic.ml
</PRE>test du toplevel :
<PRE>
$ topbasic
Mini-BASIC version 0.1

&gt; 10 PRINT "DONNER UN NOMBRE"
&gt; 20 INPUT X
&gt; 30 PRINT X
&gt; LIST

10  PRINT "DONNER UN NOMBRE"
20  INPUT X
30  PRINT X

&gt; RUN
DONNER UN NOMBRE
44
44
&gt; END
A bient�t...
        Objective Caml version 2.04

# 
</PRE></span><script language="JavaScript"><!--
  closePopUp("7_APPEND/Compilationcor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> Create a <A id="a182__8_APPEND/Compilationcor.ml.tex" href="javascript: void showMessage('8_APPEND/Compilationcor.ml.tex')" class="mousable"><SPAN style=""><!-- 8,APPEND/Compilationcor.ml.tex,basic-autonome -->standalone</SPAN></A> executable which runs the Basic interpreter. 
<!-- POPUP DEFINITION -->
<layer id="l__8_APPEND/Compilationcor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","8_APPEND/Compilationcor.ml.tex","");
// --></script><span style="">
 compilation et �dition de liens : 
<PRE>
$ ocamlc -custom -o basic.exe syntax.cmo pprint.cmo alexsynt.cmo eval.cmo mainbasic.ml</PRE>test de l'ex�cutable autonome :
<PRE>
$ basic.exe
Mini-BASIC version 0.1

&gt; 10 PRINT "BONJOUR"
&gt; LIST

10  PRINT "BONJOUR"

&gt; RUN
BONJOUR
&gt; END
A bient�t...
$
</PRE></span><script language="JavaScript"><!--
  closePopUp("8_APPEND/Compilationcor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script></OL><A NAME="toc102"></A>
<H3> Comparison of Performance</H3>
Try to compare the performance of code produced by the bytecode compiler and by the native compiler. For this purpose, write an application
for sorting lists and arrays.
<OL type=1>
<LI>
 Write a polymorphic function for sorting lists. The order relation should be passed as an argument to the
sort function. The sort algorithm can be selected by the reader. For
example: bubble sort, or quick sort. Write this function as <TT><A id="a183__9_APPEND/Compilationcor.ml.tex" href="javascript: void showMessage('9_APPEND/Compilationcor.ml.tex')" class="mousable"><SPAN style=""><!-- 9,APPEND/Compilationcor.ml.tex,tri-perf -->sort.ml</SPAN></A></TT>.  
<!-- POPUP DEFINITION -->
<layer id="l__9_APPEND/Compilationcor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","9_APPEND/Compilationcor.ml.tex","");
// --></script><span style="">
 On utilise les fichiers <TT>sort.mli</TT> et <TT>sort.ml</TT> de la distribution qui d�finissent les fonctions <TT>list</TT> et <TT>array</TT>
de tri d'une liste et d'un tableau.<BR>
<BR>
<TT>sort.mli</TT> : <BR>
<BR>


<PRE>
<CODE>(***********************************************************************)</CODE><BR><CODE>(*                                                                     *)</CODE><BR><CODE>(*                           Objective Caml                            *)</CODE><BR><CODE>(*                                                                     *)</CODE><BR><CODE>(*            Xavier Leroy, projet Cristal, INRIA Rocquencourt         *)</CODE><BR><CODE>(*                                                                     *)</CODE><BR><CODE>(*  Copyright 1996 Institut National de Recherche en Informatique et   *)</CODE><BR><CODE>(*  Automatique.  Distributed only by permission.                      *)</CODE><BR><CODE>(*                                                                     *)</CODE><BR><CODE>(***********************************************************************)</CODE><BR><BR><CODE>(* $Id: sort.mli,v 1.1.1.1 2000/06/26 14:37:50 xleroy Exp $ *)</CODE><BR><BR><CODE>(* Module [Sort]: sorting and merging lists *)</CODE><BR><BR><B>val</B><CODE> </CODE>list<CODE> </CODE><CODE>:</CODE><CODE> </CODE><TT>(</TT><I>'a</I><CODE> </CODE>-&gt;<CODE> </CODE><I>'a</I><CODE> </CODE>-&gt;<CODE> </CODE>bool<TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE><I>'a</I><CODE> </CODE>list<CODE> </CODE>-&gt;<CODE> </CODE><I>'a</I><CODE> </CODE>list<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(* Sort a list in increasing order according to an ordering predicate.</CODE><BR><CODE>           The predicate should return [true] if its first argument is</CODE><BR><CODE>           less than or equal to its second argument. *)</CODE><BR><BR><B>val</B><CODE> </CODE>array<CODE> </CODE><CODE>:</CODE><CODE> </CODE><TT>(</TT><I>'a</I><CODE> </CODE>-&gt;<CODE> </CODE><I>'a</I><CODE> </CODE>-&gt;<CODE> </CODE>bool<TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE><I>'a</I><CODE> </CODE>array<CODE> </CODE>-&gt;<CODE> </CODE>unit<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(* Sort an array in increasing order according to an</CODE><BR><CODE>           ordering predicate.</CODE><BR><CODE>           The predicate should return [true] if its first argument is</CODE><BR><CODE>           less than or equal to its second argument.</CODE><BR><CODE>           The array is sorted in place. *)</CODE><BR><BR><B>val</B><CODE> </CODE>merge<CODE> </CODE><CODE>:</CODE><CODE> </CODE><TT>(</TT><I>'a</I><CODE> </CODE>-&gt;<CODE> </CODE><I>'a</I><CODE> </CODE>-&gt;<CODE> </CODE>bool<TT>)</TT><CODE> </CODE>-&gt;<CODE> </CODE><I>'a</I><CODE> </CODE>list<CODE> </CODE>-&gt;<CODE> </CODE><I>'a</I><CODE> </CODE>list<CODE> </CODE>-&gt;<CODE> </CODE><I>'a</I><CODE> </CODE>list<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(* Merge two lists according to the given predicate.</CODE><BR><CODE>           Assuming the two argument lists are sorted according to the</CODE><BR><CODE>           predicate, [merge] returns a sorted list containing the elements</CODE><BR><CODE>           from the two lists. The behavior is undefined if the two</CODE><BR><CODE>           argument lists were not sorted. *)</CODE><BR>

</PRE>
<BR>
<BR>
<TT>sort.ml</TT><BR>
<BR>


<PRE>
<CODE>(***********************************************************************)</CODE><BR><CODE>(*                                                                     *)</CODE><BR><CODE>(*                           Objective Caml                            *)</CODE><BR><CODE>(*                                                                     *)</CODE><BR><CODE>(*            Xavier Leroy, projet Cristal, INRIA Rocquencourt         *)</CODE><BR><CODE>(*                                                                     *)</CODE><BR><CODE>(*  Copyright 1996 Institut National de Recherche en Informatique et   *)</CODE><BR><CODE>(*  Automatique.  Distributed only by permission.                      *)</CODE><BR><CODE>(*                                                                     *)</CODE><BR><CODE>(***********************************************************************)</CODE><BR><BR><CODE>(* $Id: sort.ml,v 1.1.1.1 2000/06/26 14:37:50 xleroy Exp $ *)</CODE><BR><BR><CODE>(* Merging and sorting *)</CODE><BR><BR><B>open</B><CODE> </CODE>Array<BR><BR><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>merge<CODE> </CODE>order<CODE> </CODE>l1<CODE> </CODE>l2<CODE> </CODE><CODE>=</CODE><BR><CODE> </CODE><CODE> </CODE><B>match</B><CODE> </CODE>l1<CODE> </CODE><B>with</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>[]<CODE> </CODE>-&gt;<CODE> </CODE>l2<BR><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>h1<CODE> </CODE>::<CODE> </CODE>t1<CODE> </CODE>-&gt;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>match</B><CODE> </CODE>l2<CODE> </CODE><B>with</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>[]<CODE> </CODE>-&gt;<CODE> </CODE>l1<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>h2<CODE> </CODE>::<CODE> </CODE>t2<CODE> </CODE>-&gt;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>order<CODE> </CODE>h1<CODE> </CODE>h2<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>then</B><CODE> </CODE>h1<CODE> </CODE>::<CODE> </CODE>merge<CODE> </CODE>order<CODE> </CODE>t1<CODE> </CODE>l2<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE>h2<CODE> </CODE>::<CODE> </CODE>merge<CODE> </CODE>order<CODE> </CODE>l1<CODE> </CODE>t2<BR><BR><B>let</B><CODE> </CODE>list<CODE> </CODE>order<CODE> </CODE>l<CODE> </CODE><CODE>=</CODE><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>initlist<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>[]<CODE> </CODE>-&gt;<CODE> </CODE>[]<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>[</CODE>e<CODE>]</CODE><CODE> </CODE>-&gt;<CODE> </CODE><CODE>[[</CODE>e<CODE>]]</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>e1::e2::rest<CODE> </CODE>-&gt;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><TT>(</TT><B>if</B><CODE> </CODE>order<CODE> </CODE>e1<CODE> </CODE>e2<CODE> </CODE><B>then</B><CODE> </CODE><CODE>[</CODE>e1;e2<CODE>]</CODE><CODE> </CODE><B>else</B><CODE> </CODE><CODE>[</CODE>e2;e1<CODE>]</CODE><TT>)</TT><CODE> </CODE>::<CODE> </CODE>initlist<CODE> </CODE>rest<CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>merge2<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>l1::l2::rest<CODE> </CODE>-&gt;<CODE> </CODE>merge<CODE> </CODE>order<CODE> </CODE>l1<CODE> </CODE>l2<CODE> </CODE>::<CODE> </CODE>merge2<CODE> </CODE>rest<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>x<CODE> </CODE>-&gt;<CODE> </CODE>x<CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>mergeall<CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>function</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>[]<CODE> </CODE>-&gt;<CODE> </CODE>[]<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE><CODE>[</CODE>l<CODE>]</CODE><CODE> </CODE>-&gt;<CODE> </CODE>l<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>|</CODE><CODE> </CODE>llist<CODE> </CODE>-&gt;<CODE> </CODE>mergeall<CODE> </CODE><TT>(</TT>merge2<CODE> </CODE>llist<TT>)</TT><CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE>mergeall<TT>(</TT>initlist<CODE> </CODE>l<TT>)</TT><BR><BR><B>let</B><CODE> </CODE>swap<CODE> </CODE>arr<CODE> </CODE>i<CODE> </CODE>j<CODE> </CODE><CODE>=</CODE><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>tmp<CODE> </CODE><CODE>=</CODE><CODE> </CODE>unsafe_get<CODE> </CODE>arr<CODE> </CODE>i<CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE>unsafe_set<CODE> </CODE>arr<CODE> </CODE>i<CODE> </CODE><TT>(</TT>unsafe_get<CODE> </CODE>arr<CODE> </CODE>j<TT>)</TT>;<BR><CODE> </CODE><CODE> </CODE>unsafe_set<CODE> </CODE>arr<CODE> </CODE>j<CODE> </CODE>tmp<BR><BR><B>let</B><CODE> </CODE>array<CODE> </CODE>order<CODE> </CODE>arr<CODE> </CODE><CODE>=</CODE><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>qsort<CODE> </CODE>lo<CODE> </CODE>hi<CODE> </CODE><CODE>=</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>hi<CODE> </CODE><CODE>&lt;=</CODE><CODE> </CODE>lo<CODE> </CODE><B>then</B><CODE> </CODE>()<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE><B>if</B><CODE> </CODE>hi<CODE> </CODE><CODE>-</CODE><CODE> </CODE>lo<CODE> </CODE><CODE>&lt;</CODE><CODE> </CODE><CODE>5</CODE><CODE> </CODE><B>then</B><CODE> </CODE><B>begin</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(* Use insertion sort *)</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>for</B><CODE> </CODE>i<CODE> </CODE><CODE>=</CODE><CODE> </CODE>lo<CODE> </CODE><CODE>+</CODE><CODE> </CODE><CODE>1</CODE><CODE> </CODE><B>to</B><CODE> </CODE>hi<CODE> </CODE><B>do</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>val_i<CODE> </CODE><CODE>=</CODE><CODE> </CODE>unsafe_get<CODE> </CODE>arr<CODE> </CODE>i<CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>order<CODE> </CODE>val_i<CODE> </CODE><TT>(</TT>unsafe_get<CODE> </CODE>arr<CODE> </CODE><TT>(</TT>i<CODE> </CODE><CODE>-</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><TT>)</TT><CODE> </CODE><B>then</B><CODE> </CODE><B>begin</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>unsafe_set<CODE> </CODE>arr<CODE> </CODE>i<CODE> </CODE><TT>(</TT>unsafe_get<CODE> </CODE>arr<CODE> </CODE><TT>(</TT>i<CODE> </CODE><CODE>-</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><TT>)</TT>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>j<CODE> </CODE><CODE>=</CODE><CODE> </CODE>ref<CODE> </CODE><TT>(</TT>i<CODE> </CODE><CODE>-</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>while</B><CODE> </CODE><CODE>!</CODE>j<CODE> </CODE><CODE>&gt;=</CODE><CODE> </CODE><CODE>1</CODE><CODE> </CODE><CODE>&amp;&amp;</CODE><CODE> </CODE>order<CODE> </CODE>val_i<CODE> </CODE><TT>(</TT>unsafe_get<CODE> </CODE>arr<CODE> </CODE><TT>(</TT><CODE>!</CODE>j<CODE> </CODE><CODE>-</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><TT>)</TT><CODE> </CODE><B>do</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>unsafe_set<CODE> </CODE>arr<CODE> </CODE><CODE>!</CODE>j<CODE> </CODE><TT>(</TT>unsafe_get<CODE> </CODE>arr<CODE> </CODE><TT>(</TT><CODE>!</CODE>j<CODE> </CODE><CODE>-</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><TT>)</TT>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>decr<CODE> </CODE>j<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>done</B>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>unsafe_set<CODE> </CODE>arr<CODE> </CODE><CODE>!</CODE>j<CODE> </CODE>val_i<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>end</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>done</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>end</B><CODE> </CODE><B>else</B><CODE> </CODE><B>begin</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>mid<CODE> </CODE><CODE>=</CODE><CODE> </CODE><TT>(</TT>lo<CODE> </CODE><CODE>+</CODE><CODE> </CODE>hi<TT>)</TT><CODE> </CODE><B>lsr</B><CODE> </CODE><CODE>1</CODE><CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(* Select median value from among LO, MID, and HI *)</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>pivotpos<CODE> </CODE><CODE>=</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>vlo<CODE> </CODE><CODE>=</CODE><CODE> </CODE>unsafe_get<CODE> </CODE>arr<CODE> </CODE>lo<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>and</B><CODE> </CODE>vhi<CODE> </CODE><CODE>=</CODE><CODE> </CODE>unsafe_get<CODE> </CODE>arr<CODE> </CODE>hi<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>and</B><CODE> </CODE>vmid<CODE> </CODE><CODE>=</CODE><CODE> </CODE>unsafe_get<CODE> </CODE>arr<CODE> </CODE>mid<CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>order<CODE> </CODE>vlo<CODE> </CODE>vmid<CODE> </CODE><B>then</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>order<CODE> </CODE>vmid<CODE> </CODE>vhi<CODE> </CODE><B>then</B><CODE> </CODE>mid<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE><B>if</B><CODE> </CODE>order<CODE> </CODE>vlo<CODE> </CODE>vhi<CODE> </CODE><B>then</B><CODE> </CODE>hi<CODE> </CODE><B>else</B><CODE> </CODE>lo<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>order<CODE> </CODE>vhi<CODE> </CODE>vmid<CODE> </CODE><B>then</B><CODE> </CODE>mid<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE><B>if</B><CODE> </CODE>order<CODE> </CODE>vhi<CODE> </CODE>vlo<CODE> </CODE><B>then</B><CODE> </CODE>hi<CODE> </CODE><B>else</B><CODE> </CODE>lo<CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>swap<CODE> </CODE>arr<CODE> </CODE>pivotpos<CODE> </CODE>hi;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>pivot<CODE> </CODE><CODE>=</CODE><CODE> </CODE>unsafe_get<CODE> </CODE>arr<CODE> </CODE>hi<CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>i<CODE> </CODE><CODE>=</CODE><CODE> </CODE>ref<CODE> </CODE>lo<CODE> </CODE><B>and</B><CODE> </CODE>j<CODE> </CODE><CODE>=</CODE><CODE> </CODE>ref<CODE> </CODE>hi<CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>while</B><CODE> </CODE><CODE>!</CODE>i<CODE> </CODE><CODE>&lt;</CODE><CODE> </CODE><CODE>!</CODE>j<CODE> </CODE><B>do</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>while</B><CODE> </CODE><CODE>!</CODE>i<CODE> </CODE><CODE>&lt;</CODE><CODE> </CODE>hi<CODE> </CODE><CODE>&amp;&amp;</CODE><CODE> </CODE>order<CODE> </CODE><TT>(</TT>unsafe_get<CODE> </CODE>arr<CODE> </CODE><CODE>!</CODE>i<TT>)</TT><CODE> </CODE>pivot<CODE> </CODE><B>do</B><CODE> </CODE>incr<CODE> </CODE>i<CODE> </CODE><B>done</B>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>while</B><CODE> </CODE><CODE>!</CODE>j<CODE> </CODE><CODE>&gt;</CODE><CODE> </CODE>lo<CODE> </CODE><CODE>&amp;&amp;</CODE><CODE> </CODE>order<CODE> </CODE>pivot<CODE> </CODE><TT>(</TT>unsafe_get<CODE> </CODE>arr<CODE> </CODE><CODE>!</CODE>j<TT>)</TT><CODE> </CODE><B>do</B><CODE> </CODE>decr<CODE> </CODE>j<CODE> </CODE><B>done</B>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE><CODE>!</CODE>i<CODE> </CODE><CODE>&lt;</CODE><CODE> </CODE><CODE>!</CODE>j<CODE> </CODE><B>then</B><CODE> </CODE>swap<CODE> </CODE>arr<CODE> </CODE><CODE>!</CODE>i<CODE> </CODE><CODE>!</CODE>j<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>done</B>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>swap<CODE> </CODE>arr<CODE> </CODE><CODE>!</CODE>i<CODE> </CODE>hi;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>(* Recurse on larger half first *)</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE><TT>(</TT><CODE>!</CODE>i<CODE> </CODE><CODE>-</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><CODE> </CODE><CODE>-</CODE><CODE> </CODE>lo<CODE> </CODE><CODE>&gt;=</CODE><CODE> </CODE>hi<CODE> </CODE><CODE>-</CODE><CODE> </CODE><TT>(</TT><CODE>!</CODE>i<CODE> </CODE><CODE>+</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><CODE> </CODE><B>then</B><CODE> </CODE><B>begin</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>qsort<CODE> </CODE>lo<CODE> </CODE><TT>(</TT><CODE>!</CODE>i<CODE> </CODE><CODE>-</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT>;<CODE> </CODE>qsort<CODE> </CODE><TT>(</TT><CODE>!</CODE>i<CODE> </CODE><CODE>+</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><CODE> </CODE>hi<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>end</B><CODE> </CODE><B>else</B><CODE> </CODE><B>begin</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>qsort<CODE> </CODE><TT>(</TT><CODE>!</CODE>i<CODE> </CODE><CODE>+</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><CODE> </CODE>hi;<CODE> </CODE>qsort<CODE> </CODE>lo<CODE> </CODE><TT>(</TT><CODE>!</CODE>i<CODE> </CODE><CODE>-</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>end</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>end</B><CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE>qsort<CODE> </CODE><CODE>0</CODE><CODE> </CODE><TT>(</TT>Array.length<CODE> </CODE>arr<CODE> </CODE><CODE>-</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("9_APPEND/Compilationcor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> Create the main function in the file 
<TT><A id="a184__10_APPEND/Compilationcor.ml.tex" href="javascript: void showMessage('10_APPEND/Compilationcor.ml.tex')" class="mousable"><SPAN style=""><!-- 10,APPEND/Compilationcor.ml.tex,tri-main -->trilist.ml</SPAN></A></TT>,  
which uses the previous function and applies it to a list of integers by sorting it in increasing order, then in decreasing order. 
<!-- POPUP DEFINITION -->
<layer id="l__10_APPEND/Compilationcor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","10_APPEND/Compilationcor.ml.tex","");
// --></script><span style="">
 <TT>interval.ml</TT> :<BR>
<BR>


<PRE>
<B>let</B><CODE> </CODE>interval<CODE> </CODE>order<CODE> </CODE>next<CODE> </CODE>a<CODE> </CODE>b<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>aux<CODE> </CODE>a<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>not<CODE> </CODE><TT>(</TT>order<CODE> </CODE>a<CODE> </CODE>b<TT>)</TT><CODE> </CODE><B>then</B><CODE> </CODE><CODE>[</CODE>a<CODE>]</CODE><CODE> </CODE><B>else</B><CODE> </CODE><CODE> </CODE>a<CODE> </CODE>::<CODE> </CODE>aux<CODE> </CODE><CODE> </CODE><TT>(</TT>next<CODE> </CODE>a<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE>aux<CODE> </CODE>a;;<BR><BR><BR>

</PRE>
<BR>
<BR>
<TT>trilist.ml</TT> : <BR>
<BR>


<PRE><BR><B>let</B><CODE> </CODE>main<CODE> </CODE>()<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>il<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Interval.interval<CODE> </CODE><TT>(</TT><CODE>&gt;</CODE><TT>)</TT><CODE> </CODE><TT>(</TT><B>fun</B><CODE> </CODE>x<CODE> </CODE>-&gt;<CODE> </CODE>x<CODE> </CODE><CODE>-</CODE><CODE>1</CODE><TT>)</TT><CODE> </CODE><CODE>5</CODE><CODE>0</CODE><CODE>0</CODE><CODE>0</CODE><CODE>0</CODE><CODE> </CODE><CODE>2</CODE><CODE>0</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>and</B><CODE> </CODE>il2<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Interval.interval<CODE> </CODE><TT>(</TT><CODE>&lt;</CODE><TT>)</TT><CODE> </CODE><TT>(</TT><B>fun</B><CODE> </CODE>x<CODE> </CODE>-&gt;<CODE> </CODE>x<CODE> </CODE><CODE>+</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><CODE> </CODE><CODE>2</CODE><CODE>0</CODE><CODE> </CODE><CODE>5</CODE><CODE>0</CODE><CODE>0</CODE><CODE>0</CODE><CODE>0</CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Sort.list<CODE> </CODE><TT>(</TT><CODE>&lt;</CODE><TT>)</TT><CODE> </CODE>il<CODE>,</CODE><CODE> </CODE>Sort.list<CODE> </CODE><TT>(</TT><CODE>&gt;</CODE><TT>)</TT><CODE> </CODE>il2;;<BR><BR>main();;<BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("10_APPEND/Compilationcor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> Create two standalone <A id="a185__11_APPEND/Compilationcor.ml.tex" href="javascript: void showMessage('11_APPEND/Compilationcor.ml.tex')" class="mousable"><SPAN style=""><!-- 11,APPEND/Compilationcor.ml.tex,tri-compile -->executables</SPAN></A> - one with the bytecode 
compiler, and another with the native compiler. Measure the execution time of these two programs. 
Choose lists of sufficient size to get a good idea of the time differences.
<!-- POPUP DEFINITION -->
<layer id="l__11_APPEND/Compilationcor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","11_APPEND/Compilationcor.ml.tex","");
// --></script><span style="">
 <OL type=a>
<LI>
 code-octet (Unix) : trilbyte.exe<BR>
<BR>
<PRE>
ocamlc -custom -o trilbyte.exe sort.mli sort.ml interval.ml trilist.ml
</PRE>
<LI> natif (Unix) : trilopt.exe
<PRE>
ocamlopt -o trilopt.exe sort.mli sort.ml interval.ml trilist.ml
</PRE></OL>Performances : 
<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=1>
<TR><TD  ALIGN=left NOWRAP>trilbyte.exe</TD>
<TD  ALIGN=left NOWRAP>trilopt.exe</TD>
</TR>
<TR><TD  ALIGN=left NOWRAP>2,55 secondes (user)</TD>
<TD  ALIGN=left NOWRAP>1,67 secondes (user)</TD>
</TR></TABLE><BR>
Le rapport trilopt.exe / trilbyte.exe est de 2/3.
</span><script language="JavaScript"><!--
  closePopUp("11_APPEND/Compilationcor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> Rewrite the sort program for arrays. Continue using an order function as argument. <A id="a186__12_APPEND/Compilationcor.ml.tex" href="javascript: void showMessage('12_APPEND/Compilationcor.ml.tex')" class="mousable"><SPAN style=""><!-- 12,APPEND/Compilationcor.ml.tex,tri-array -->Perform</SPAN></A> the test on arrays filled in the same manner as 
for the lists. 
<!-- POPUP DEFINITION -->
<layer id="l__12_APPEND/Compilationcor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","12_APPEND/Compilationcor.ml.tex","");
// --></script><span style="">
 <TT>triarray.ml</TT> : <BR>
<BR>


<PRE><BR><BR><B>let</B><CODE> </CODE>main<CODE> </CODE>()<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>il<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Array.of_list<TT>(</TT>Interval.interval<CODE> </CODE><TT>(</TT><CODE>&gt;</CODE><TT>)</TT><CODE> </CODE><TT>(</TT><B>fun</B><CODE> </CODE>x<CODE> </CODE>-&gt;<CODE> </CODE>x<CODE> </CODE><CODE>-</CODE><CODE>1</CODE><TT>)</TT><CODE> </CODE><CODE>5</CODE><CODE>0</CODE><CODE>0</CODE><CODE>0</CODE><CODE>0</CODE><CODE> </CODE><CODE>2</CODE><CODE>0</CODE><TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><B>and</B><CODE> </CODE>il2<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Array.of_list<TT>(</TT>Interval.interval<CODE> </CODE><TT>(</TT><CODE>&lt;</CODE><TT>)</TT><CODE> </CODE><TT>(</TT><B>fun</B><CODE> </CODE>x<CODE> </CODE>-&gt;<CODE> </CODE>x<CODE> </CODE><CODE>+</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><CODE> </CODE><CODE>2</CODE><CODE>0</CODE><CODE> </CODE><CODE>5</CODE><CODE>0</CODE><CODE>0</CODE><CODE>0</CODE><CODE>0</CODE><TT>)</TT><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Sort.array<CODE> </CODE><TT>(</TT><CODE>&lt;</CODE><TT>)</TT><CODE> </CODE>il<CODE>,</CODE><CODE> </CODE>Sort.array<CODE> </CODE><TT>(</TT><CODE>&gt;</CODE><TT>)</TT><CODE> </CODE>il2;;<BR><BR>main();;<BR>

</PRE>
<BR>
<BR>
<OL type=a>
<LI>
 code-octet (Unix) : triabyte.exe
<PRE>
ocamlc -custom -o triabyte.exe sort.mli sort.ml interval.ml triarray.ml
</PRE>
<LI> natif (Unix) : triaopt.exe
<PRE>
ocamlopt -o triaoptu.exe sort.mli sort.ml interval.ml triarray.ml
</PRE></OL>Performances : 
<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=1>
<TR><TD  ALIGN=left NOWRAP>triabyte.exe</TD>
<TD  ALIGN=left NOWRAP>triaopt.exe</TD>
</TR>
<TR><TD  ALIGN=left NOWRAP>515 s</TD>
<TD  ALIGN=left NOWRAP>106 s</TD>
</TR></TABLE><BR>
Le rapport triaopt.exe / triabyte.exe est de 1/5.
</span><script language="JavaScript"><!--
  closePopUp("12_APPEND/Compilationcor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> What can we say about the <A id="a187__13_APPEND/Compilationcor.ml.tex" href="javascript: void showMessage('13_APPEND/Compilationcor.ml.tex')" class="mousable"><SPAN style=""><!-- 13,APPEND/Compilationcor.ml.tex,tri-comment -->results</SPAN></A> of these tests? 
<!-- POPUP DEFINITION -->
<layer id="l__13_APPEND/Compilationcor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","13_APPEND/Compilationcor.ml.tex","");
// --></script><span style="">
 Le compilateur natif apporte un gain de temps d'ex�cution variable ( facteur 2/3 pour
les liste et 1/5 pour les tableaux).
</span><script language="JavaScript"><!--
  closePopUp("13_APPEND/Compilationcor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script></OL><HR>
<A HREF="book-ora068.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
<A HREF="index.html"><IMG SRC ="contents_motif.gif" ALT="Contents"></A>
<A HREF="book-ora070.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
</BODY>
</HTML>
